package 链表和树.二叉树;

import javax.swing.tree.TreeNode;

//Java：二叉树的最大深度
public class MaximumDepthOfBinaryTree{
    public static void main(String[] args) {
        Solution solution = new MaximumDepthOfBinaryTree().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
//  public class TreeNode {
//      int val;
//      TreeNode left;
//      TreeNode right;
//      TreeNode() {}
//      TreeNode(int val) { this.val = val; }
//      TreeNode(int val, TreeNode left, TreeNode right) {
//          this.val = val;
//          this.left = left;
//          this.right = right;
//      }
//  }
//递归的基本架构
//基础情况(Base Case)：递归的终止条件
//递归调用(Recursive Call)：对子问题的调用
//合并结果(Combine Results)：将子问题结果合并为当前问题的解
class Solution {
    public int maxDepth(TreeNode root) {
        //归的时候的边界条件
        if(root == null){
            return 0;
        }
        //递下去
        int lDepth = maxDepth(root.left);
        int rDepth = maxDepth(root.right);
        //可以理解为在这里的返回才是我们真正需要的因为左右子树归完了下一步就是执行这个
        //将子问题结果合并为当前问题的解
        return Math.max(lDepth, rDepth) + 1;//最后的最后再返回左右子树的最大值加1(根节点)
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}